// 用户模块路由处理函数

// 引入数据库模块
const db = require('../mysql/index')
// 密码加密模块
const bcrypt = require('bcryptjs')
// 引入jwt
const jwt = require('jsonwebtoken')
const secretKey = 'rent_car'    // 密钥

// 注册
exports.register = (req, res) => {
    const userInfo = req.body
    // 判断用户信息是否合法
    if (!userInfo.username || !userInfo.password) return res.cc('用户名或密码不合法')
    // 用户名是否被占用
    const userName = 'SELECT * FROM admin WHERE username = ?'
    db.query(userName, userInfo.username, (err, result) => {
        // sql执行失败
        if (err) return res.cc(err)
        // 用户名存在
        if (result.length > 0) return res.cc('用户名已存在')
        // 用户名不存在（可以注册）
        // 对密码进行加密 bcrypt.hashSync(要加密的密码, 长度)
        userInfo.password = bcrypt.hashSync(userInfo.password, 10)
        // 添加用户
        const sqlAddUser = 'INSERT INTO admin set ?'
        db.query(sqlAddUser, {username: userInfo.username, password: userInfo.password}, (err, result) => {
            if (err) return res.cc(err)
            // 添加成功
            if (result.affectedRows === 1) return res.cc('注册成功', 200)
        })
    })
}
// 登录
exports.login = (req, res) => {
    const userInfo = req.body
    if (!userInfo.username || !userInfo.password) return res.cc('用户名或密码不合法')
    // 查询是否用户存在
    const sqlUser = 'SELECT * FROM admin WHERE username = ?'
    db.query(sqlUser, userInfo.username, (err, result) => {
        if (err) return res.cc(err)
        if (result.length === 0) return res.cc('该用户不存在')
        // 用户存在
        if (result.length === 1) {
            // 判断密码是否正确
            // 用户输入的密码,和数据库中存储的密码进行对比
            const compareResult = bcrypt.compareSync(userInfo.password, result[0].password)
            if (!compareResult) return res.cc('输入的密码有误')
            // 登录成功
            // 进行加密生成token，密码和用户头像不用加在token里面
            const user = {...result[0], password: '', user_pic: ''}
            const tokenStr ='Bearer ' + jwt.sign(user, secretKey, {expiresIn: '7d'})
            // 将token保存
            const saveToken = 'UPDATE admin SET token = ? WHERE id = ?'
            db.query(saveToken, [tokenStr, result[0].id], (saveErr, saveResult) => {
                if (saveErr) return res.cc(saveErr);
                if (saveResult.affectedRows !== 1) return res.cc('保存token失败')
            })
            return res.send({
                code: 200,
                message: '登录成功',
                token: tokenStr,
                id: result[0].id
            })
        }
    })
}
// 获取用户信息
exports.getUserInfo = (req, res) => {
    const token = req.body
    const sqlUser = 'SELECT * FROM admin WHERE token = ?'
    db.query(sqlUser, token.token, (err, result) => {
        if (err) return res.cc(err)
        if (result.length !== 1) return res.cc('暂未登录')
        if (result.length === 1) {
            // 删除密码
            Reflect.deleteProperty(result[0], 'password')
            result[0].user_pic = 'http://62.234.193.89:3007/' + result[0].user_pic;
            return res.send({
                code: 200,
                message: '获取用户信息成功',
                data: result[0]
            })
        }
    })
}
// 退出登录
exports.logout = (req, res) => {
    const tokenStr = req.body;
    const sql = 'UPDATE admin SET token = "" WHERE token = ?'
    db.query(sql, tokenStr.token, (err, result) => {
        if (err) return res.cc(err);
        if (result.affectedRows !== 1) return res.cc('更新token失败')
        return res.send({
            code: 200,
            message: '退出登录成功'
        })
    })
}
